package br.com.erpcortume.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import br.com.erpcortume.beans.Funcionario;
import br.com.erpcortume.enums.EnumCargo;
import br.com.erpcortume.services.AdiantamentoService;
import br.com.erpcortume.services.FuncionarioServices;

@RequestMapping("/funcionario")
@Controller
public class FuncionarioController {
	
	private static final String CONTEXT_PAGE = "pages";

	@Autowired
	private FuncionarioServices funcionarioServices;
	
	@Autowired
	private AdiantamentoService adiantamentoService; 
	
	
	@RequestMapping(value = "/novo")
	private ModelAndView novo(){
		
		ModelAndView modelAndView = new ModelAndView(CONTEXT_PAGE+"/funcionario/funcionario");
		
		geraComboCargos(modelAndView);
		
		return modelAndView;
	}
	
	@RequestMapping(value = "/salvar", method = RequestMethod.POST)
	private String salvar(Funcionario funcionario){
		
		funcionarioServices.salvar(funcionario);
		
		return "redirect:/funcionario/listar";
	}
	
	
	@RequestMapping (value = "/listar", method = RequestMethod.GET) 
	public ModelAndView listar(){
		
		List<Funcionario> funcionario = funcionarioServices.listar();
		ModelAndView modelAndView = new ModelAndView(CONTEXT_PAGE+"/funcionario/lista");
		modelAndView.addObject(funcionario);
		
		return modelAndView; 
		
	}
	
	
	@RequestMapping (value = "/editar/{id}", method = RequestMethod.GET) 
	public ModelAndView editar(@PathVariable Long id){
		
		Funcionario funcionario = funcionarioServices.loadById(id);
		ModelAndView mav = new ModelAndView(CONTEXT_PAGE+"/funcionario/funcionario");
		
		mav.addObject(funcionario);
		geraComboCargos(mav);
		
		return mav;
	}
	
	@RequestMapping(value = "/excluir/{id}", method = RequestMethod.GET)
	public String excluir(@PathVariable Long id){
		funcionarioServices.excluir(id);
		return "redirect:/funcionario/listar";
	}
	
	@RequestMapping(value = "/toRemunerar/{id}", method = RequestMethod.GET)
	public ModelAndView toRemunerar(@PathVariable Long id){
		
		Funcionario funcionario = funcionarioServices.loadById(id);
		ModelAndView mav = new ModelAndView(CONTEXT_PAGE+"/funcionario/remuneracao");
		
		mav.addObject(funcionario);
		
		mav.addObject("adiantamentos", adiantamentoService.allAdiantamentos());
		
		return mav;
	}
	
	
	@RequestMapping(value = "/remunerar" ,method = RequestMethod.POST)
	public String remunerar(Funcionario funcionario, String valor, String adiantamento){
		funcionarioServices.remunerar(funcionarioServices.loadById(funcionario.getId()), valor, adiantamento);
		
		return "redirect:/funcionario/toRemunerar/"+funcionario.getId();
	}
	
	
	@RequestMapping(value = "/inativarAtivar/{id}", method = RequestMethod.GET)
	public String inativarAtivar(@PathVariable Long id){
		
		Funcionario funcionario = funcionarioServices.loadById(id);
		
		if (funcionario.isAtivo()) {
			funcionario.setAtivo(false);
		}else {
			funcionario.setAtivo(true);
		}
		
		funcionarioServices.salvar(funcionario);
		
		return "redirect:/funcionario/listar";
	}
	
	
	private void geraComboCargos(ModelAndView modelAndView){
		modelAndView.addObject("cargos", EnumCargo.values());
	}
	
}
